package org.shoukaiseki.aliyun.oss.service;

import com.aliyuncs.exceptions.ClientException;
import org.shoukaiseki.aliyun.oss.config.AliyunOSSCoreProperties;
import org.shoukaiseki.aliyun.oss.config.BaseOSSProperties;
import org.shoukaiseki.aliyun.oss.domain.StsInfo;
import org.shoukaiseki.aliyun.oss.lambda.StsInfoSuccess;

import java.io.InputStream;

public interface AliyunOSSManagerService{


    /**
     * 默认OSS存储路径
     * <br>
     * uuid为文件名
     * @see AliyunOSSManagerService#getStsInfo(BaseOSSProperties, String, boolean)
     */
    StsInfo getStsInfo(String fileName) throws Exception;

    /**
     * 获取 sts临时令牌
     * @param baseOSSProperties
     * @param fileName                  文件名,会根据文件名获取后缀，最后以UUID+后缀名返回新的文件名
     * @param customFileName            是否使用自定义名称,false:以uuid生成文件名,true:使用fileName最为存储的文件名
     * @return
     * @throws Exception
     */
    StsInfo getStsInfo(BaseOSSProperties baseOSSProperties, String fileName,boolean customFileName) throws Exception;

    /**
     * 自定义OSS存储路径
     * <br>
     * uuid为文件名
     * @see AliyunOSSManagerService#getStsInfo(BaseOSSProperties, String, boolean)
     */
    StsInfo getStsInfo(BaseOSSProperties baseOSSProperties, String fileName) throws Exception;

    /**
     * 创建存储空间 [bucket]
     * @param bucketName
     * @return
     */
    String createBucketName(String bucketName);

    /**
     * 删除存储空间 [bucket]
     * @param bucketName
     */
    void deleteBucket(String bucketName);

    /**
     * 创建目录
     * @param bucketName
     * @param path
     * @return
     */
    String createPath(String bucketName,String path);


    /**
     * 删除文件
     * @param bucketName
     * @param path
     * @param key
     */
    void deleteFile(String bucketName, String path, String key);

    /**
     * 上传图片至OSS
     * @param inputStream  文件输入流
     * @param bucketName  存储空间
     * @param path 模拟文件夹名 如"qj_nanjing/"
     * @return String 返回的唯一MD5数字签名
     * */
    String[] uploadFile(InputStream inputStream, String bucketName, String path, String fileName) ;



    /**
     * @Description: TODO 获取图片路径
     * @param bucketName  存储空间
     * @return
     * @author jinmin
     * @date 2018/10/30 0030 下午 16:57
     */
    String getUrl(String bucketName, String fileName) ;
}
